************************************************
* RATTRAPAGE DES CONGES EN COURS D'ACQUISITION *
* DE JUIN 2002 A PERIODEPAIE<1>                *
*                                              *
*                                     STEPHANE *
************************************************

* 100 -> MAJ DES CONGES EN-COURS D'ACQUISITION
* 200 -> GESTION DES ABSENCES
* 300 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)
* 301 -> CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)
* 302 -> CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* 303 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE
* 304 -> SELECTION CONTRATSPREV POUR CONNAITRE LES COMPLEMENTS MALADIE/ACCIDENT
* 305 -> CREATION DU TABLEAU DES RUB MALADIE ET ACCIDENT A OTER DU BS

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ACTIVITES" TO F.ACTIVITE ELSE PRINT "ACTIVITE"
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE PRINT "ASSO"
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE PRINT "ABS" 
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE PRINT "CONSTANTESPAIE"
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en criture
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE PRINT "OUVERTURE CONTRATSPREV"
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE PRINT "CONVENTION"
OPEN "","DETAILADMIN" TO F.DETAILADMIN ELSE PRINT "DETAILADMIN"
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL"
OPEN "","DETAILINTER" TO F.DETAILINTER ELSE PRINT "DETAILINTER"
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE PRINT "DETAILINTER"
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE PRINT "DETAILPREST"
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE PRINT "ETAB"
OPEN "","GRILLESCC" TO F.GRILLESCC ELSE PRINT "GRILLESCC"
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE PRINT "PERIODESPAIE"

ENR_CONTRATEMP=""

READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE ENR_PERIODESPAIE=""

*********************************************************
* Recuperation des arguments

W_PERIODEFACTDEB="200206"
W_PERIODEFACTFIN=ENR_PERIODESPAIE<1>

W_DateDebMois="01/":W_PERIODEFACTDEB[5,2]:"/":W_PERIODEFACTDEB[1,4]
W_DateDebMois=ICONV(W_DateDebMois,"D4/")

W_DateFinMois="01/":W_PERIODEFACTFIN[5,2]:"/":W_PERIODEFACTFIN[1,4]
W_DateFinMois=ICONV(W_DateFinMois,"D4/")
W_DateFinMois=W_DateFinMois+32
W_DateFinMois=OCONV(W_DateFinMois,"D4/")
W_DateFinMois="01":W_DateFinMois[3,8]
W_DateFinMois=ICONV(W_DateFinMois,"D4/")-1

******
  W_HORAIRETP=""
  W_HORAIREHEBDO=""
  W_ETABLISSEMENT=""
  W_HEURESARRET=0
  W_RUBAFFECT=""
  W_CODEABSENCE=""
  W_NBJOURABS2=0

* INITIALISE LES LISTES A VIDE
W_ListeCONTRATSPREV=""
LISTEABSENCESAIDANT=""
LISTEMALADIEAIDANT=""
REQUETECONTRAT=""
REQUETEDETAIL=""
iErr=0

* SELECTION CONTRATSPREV POUR CONNAITRE LES COMPLEMENTS MALADIE/ACCIDENT
GOSUB 304

EXECUTE 'COMO ON CONGE'

W_RequeteContrat='SSELECT CONTRAT AVEC 65 <> "O" AND AVEC 7 <= "':W_DateFinMois:'" AND AVEC 8 > "':W_DateDebMois:'" OR = "" PAR 3 PAR @ID'

   EXECUTE W_RequeteContrat
   EXECUTE 'SAUVE-LISTE REQUETECONTRAT'
   EXECUTE 'LISTE REQUETECONTRAT' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1>=209 THEN
        PRINT "Rien selectionn" 
        STOP
   END

   SELECT F.CONTRAT TO REQUETECONTRAT

READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE STOP

******

W_Fini="FAUX"
LOOP
   READNEXT W_CleContrat FROM REQUETECONTRAT ELSE W_Fini="VRAI"

WHILE W_Fini="FAUX" DO

   W_CODEAIDANT=W_CleContrat[1,5]

   READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE PRINT "PAS DE CONTRAT = VIDE AVANT" 

      ENR_CONTRATEMP=ENR_CONTRAT

      * En cours d'acquisition
      ENR_CONTRATEMP<44>=0
      ENR_CONTRATEMP<45>=0
      ENR_CONTRATEMP<46>=0

      W_Passe1="EURO"

   W_PERIODECONTRATDEB=OCONV(ENR_CONTRAT<7>,"D4/")
   W_PERIODECONTRATDEB=W_PERIODECONTRATDEB[7,4]:W_PERIODECONTRATDEB[4,2]

   IF W_PERIODECONTRATDEB > W_PERIODEFACTDEB THEN
      W_PERIODEDEB=W_PERIODECONTRATDEB
   END ELSE
      W_PERIODEDEB=W_PERIODEFACTDEB
   END

   W_PERIODECONTRATFIN=""
   IF ENR_CONTRAT<8> # "" THEN
      W_PERIODECONTRATFIN=OCONV(ENR_CONTRAT<8>,"D4/")
      W_PERIODECONTRATFIN=W_PERIODECONTRATFIN[7,4]:W_PERIODECONTRATFIN[4,2]

      IF W_PERIODECONTRATFIN > W_PERIODEFACTFIN THEN
         W_PERIODEFIN=W_PERIODEFACTFIN
      END ELSE
         W_PERIODEFIN=W_PERIODECONTRATFIN
      END
   END ELSE
      W_PERIODEFIN=W_PERIODEFACTFIN
   END

   IF ENR_CONTRATEMP<63><W_PERIODEFIN THEN W_PERIODEFIN=ENR_CONTRATEMP<63>

   LOOP
   WHILE W_PERIODEDEB <= W_PERIODEFIN DO
      IF W_PERIODEDEB[5,2]=13 THEN
         W_PERIODEDEB=W_PERIODEDEB[1,4]+1:"01"
      END

      W_PERIODEFACT=W_PERIODEDEB
      W_DebMois=ICONV("01/":W_PERIODEFACT[5,2]:"/":W_PERIODEFACT[1,4],"D4/")
      W_FinMois=W_DebMois+32
      W_FinMois=OCONV(W_FinMois,"D4/")
      W_FinMois="01/":W_FinMois[4,7]
      W_FinMois=ICONV(W_FinMois,"D4/")-1
      W_NbJourMois=W_FinMois-W_DebMois+1
      W_NbJourMois=W_NbJourMois * 100

      W_AFFECTCONGESMOIS="FAUX"

      READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleContrat:W_PERIODEFACT ELSE ENR_DETAILCALCUL=""

      GOSUB 1

       W_PERIODEDEB=W_PERIODEDEB+1
    REPEAT

    WRITE ENR_CONTRATEMP ON F.CONTRAT,W_CleContrat

REPEAT

PRINT "iErr :":iErr

EXECUTE 'COMO OFF'

EXECUTE "EFFACER-LISTE LISTEABSENCESAIDANT"
EXECUTE "EFFACER-LISTE LISTEMALADIEAIDANT"
EXECUTE "EFFACER-LISTE REQUETECONTRAT"

STOP
*********************************************************
* Prog. Principal
1

W_EURO=0

   W_PASSAGEEURO=0

      READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,ENR_CONTRATEMP<1> ELSE PRINT "PAS DE CONV = VIDE AVANT"

      W_PERIODE=W_PERIODEFACT
      W_CODECONTRAT=W_CleContrat
      W_CODECONVENTION=ENR_CONTRATEMP<1>
      W_DEBUTCONTRAT=ENR_CONTRATEMP<7>
      W_DEBUTCONTRATANC=ENR_CONTRATEMP<97>
      W_ASSOCIATION=ENR_CONTRATEMP<2>

      W_JOURCONGESCP=0
      W_JOURCONGESCA=0
      W_JOURCONGESCPS=0
      W_JOURCONGESCF=0
      W_ANCIENCODE=""

	* 100 -> MAJ DES CONGES EN-COURS D'ACQUISITION
      GOSUB 100

RETURN

*********************************************************
*********************************************************
* GESTION DES CONGES
* MAJ DES CONGES EN-COURS D'ACQUISITION

100 *

    W_TOTNBJOURCONGES=0

    W_CODEABSENCE=""
    W_REQABSENCESVIDE="FAUX"
    W_TOTALJRSABSMALADIE=0
    W_NBJOURNONINDEM=0
    W_PASABS="VRAI"

    W_MOIS=W_PERIODE[5,2]
    W_ANNEE=W_PERIODE[1,4]

    W_DEBUTPERIODE=ICONV("01/":W_MOIS:"/":W_ANNEE,"D")
    W_MOISFIN=W_PERIODE[5,2]+1
    IF W_MOISFIN>12 THEN
	 W_ANNEEFIN=W_PERIODE[1,4]+1
	 W_MOISFIN="01"
    END ELSE
	 W_ANNEEFIN=W_PERIODE[1,4]
    END

    W_FINPERIODE=ICONV("01/":W_MOISFIN:"/":W_ANNEEFIN,"D4/")
    W_FINPERIODE=W_FINPERIODE-1
    W_FINPERIODE2=OCONV(W_FINPERIODE,"D4/")
    W_FINPERIODE2=W_FINPERIODE2[7,4]:W_FINPERIODE2[4,2]

    EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC 2 >= "':W_DEBUTPERIODE:'" AND AVEC DebAbsAidant <= "':W_FINPERIODE:'" AND AVEC NumMotifAidant = "01" OR = "02" OR = "04" OR = "05" OR = "06" OR = "12" OR = "13"'
    EXECUTE "SAUVE-LISTE LISTEABSENCESAIDANT"
    EXECUTE "LISTE LISTEABSENCESAIDANT" CAPTURING MSG RETURNING MSGCODE

    IF MSGCODE<1><>209 THEN 
         SELECT F.ABSENCESAIDANT TO LISTEABSENCESAIDANT

         LOOP 
 	     READNEXT CLE FROM LISTEABSENCESAIDANT ELSE
	         W_REQABSENCESVIDE="VRAI"
  	     END
	   UNTIL W_REQABSENCESVIDE="VRAI" DO

	     W_CODEABSENCE=CLE[6,2]
	     W_CLEABSENCE=CLE

	     * LECTURE ABSENCESAIDANT
	     READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CLEABSENCE ELSE
               PRINT "PAS D'ABS"
	         STOP
	     END

 	     * GESTION DES ABSENCES AUTRES QUE MALADIE MATERNITE
	     IF ENR_CONTRATEMP<31> <> 1 OR ENR_CONTRATEMP<1>="02" THEN
              W_PASABS="FAUX"
              IF W_JOURCONGESCPS=0 THEN
                 * Pas conges payes pour soldes 
                 GOSUB 200
              END
           END

         REPEAT

         * a voir
	   IF W_PASABS="VRAI" AND W_JOURCONGESCPS=0 THEN GOSUB 200

    END

* Mise a jour des 10 % du BS.

   IF W_DEBUTCONTRAT < W_DEBUTPERIODE THEN
      W_NBJOURPRESENT=250
   END ELSE
      * CALCUL AU PRORATA DES JOURS DE CONGES
      W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE+1
      W_NBJOURPRESENT=W_NBJOURPRESENT*100
      W_NBJOURPRESENT=W_NbJourMois-W_NBJOURPRESENT
      W_NBJOURPRESENT=250*W_NBJOURPRESENT/W_NbJourMois
      W_NBJOURPRESENT=INT(W_NBJOURPRESENT + 1/2)
    END

    W_MONTANTARRET=0

    * recherche des rubriques des contrats prevoyances
    * RECHERCHE DES RUBRIQUES 807 - 808

    W_CountDet2=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))
    FOR iDet2=1 TO W_CountDet2
       FOR iRubPrev=1 TO W_CountRubPrev
          IF ENR_DETAILCALCUL<2,iDet2> = W_TabPrev<iRubPrev> THEN
             W_MONTANTARRET=W_MONTANTARRET+ENR_DETAILCALCUL<5,iDet2>
          END
       NEXT iRubPrev
    NEXT iDet2 

    W_BRUTARRET=ENR_DETAILCALCUL<7>-W_MONTANTARRET
    W_HEURESARRET=ENR_DETAILCALCUL<6>

    W_VALEURHEURESJOUR=INT((W_HEURESARRET*10/100)+1/2)
    W_VALEURMONTJOUR=INT((W_BRUTARRET*10/100)+1/2)  


   W_NBJOURPRESENT=W_NBJOURPRESENT-W_TOTNBJOURCONGES
   ENR_CONTRATEMP<44>=ENR_CONTRATEMP<44>+W_NBJOURPRESENT
   ENR_CONTRATEMP<45>=ENR_CONTRATEMP<45>+W_VALEURHEURESJOUR
   ENR_CONTRATEMP<46>=ENR_CONTRATEMP<46>+W_VALEURMONTJOUR

RETURN   

*********************************************************
*********************************************************
* GESTION DES ABSENCES

200 *


      BEGIN CASE
	* MALADIE
      CASE W_CODEABSENCE="01"     
	
	  * Determine le nb jour d'abs.
        GOSUB 300

        W_NBJOURABSMALADIE=W_NBJOURABS

        * RECUPERATION ATT 17 DE CONV. COL
        READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
           PRINT "PAS DE CONVENTION"
           STOP
        END		

        IF ENR_CONVENTIONCOL<17><>"" THEN
            W_NBSUSPENSION=ENR_CONVENTIONCOL<17>*100
        END ELSE
            W_NBSUSPENSION=""
        END

        IF W_TOTALJRSABSMALADIE=0 THEN
           GOSUB 302
           W_CUMULJOURMALADIE=W_CUMULMALADIE
        END

        W_TOTALJRSABSMALADIE=W_TOTALJRSABSMALADIE+W_NBJOURABSMALADIE
        W_CUMULJOURMALADIE=W_CUMULJOURMALADIE+W_NBJOURABSMALADIE

        IF W_CUMULJOURMALADIE <= W_NBSUSPENSION THEN

           * On maintient les droits de la personne
           GOSUB 301	

           * CALCUL SALAIRE DE REFERENCE
           K=1
           LOOP
           UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
              K=K+1
           REPEAT

           * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
           * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
           IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
              ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
           END

           W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABSMALADIE)
           W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABSMALADIE)

           * PRISE DES 10 %
           W_SALREFHRES=INT(W_SALREFHRES*10/100 + 1/2)
           W_SALREFMONT=INT(W_SALREFMONT*10/100 + 1/2)

           ENR_CONTRATEMP<45>=ENR_CONTRATEMP<45>+W_SALREFHRES
           ENR_CONTRATEMP<46>=ENR_CONTRATEMP<46>+W_SALREFMONT

        END ELSE
           W_NBJOURINDEM=W_NBSUSPENSION - (W_CUMULJOURMALADIE - W_NBJOURABSMALADIE)

           IF W_NBJOURINDEM > 0 THEN
              * A Indemnise
              W_NBJOURABS=W_NBJOURINDEM

              GOSUB 301

              * CALCUL SALAIRE DE REFERENCE
              K=1
              LOOP
              UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
                 K=K+1
              REPEAT
		
              * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
              * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
              IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
                 ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
              END

              W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABS)
              W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABS)

              * PRISE DES 10 %
              W_SALREFHRES=INT(W_SALREFHRES*10/100 + 1/2)
              W_SALREFMONT=INT(W_SALREFMONT*10/100 + 1/2)

              ENR_CONTRATEMP<45>=ENR_CONTRATEMP<45>+W_SALREFHRES
              ENR_CONTRATEMP<46>=ENR_CONTRATEMP<46>+W_SALREFMONT

              W_NBJOURNONINDEM=W_NBJOURABSMALADIE - W_NBJOURINDEM
              IF W_NBJOURNONINDEM > 0 THEN
                 W_NBJOURABS=W_NBJOURNONINDEM
                 GOSUB 301
                 W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
                 ENR_CONTRATEMP<70>=ENR_CONTRATEMP<70>+W_NBJOURNONINDEM
              END

           END ELSE
              GOSUB 301              
              W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
              ENR_CONTRATEMP<70>=ENR_CONTRATEMP<70>+W_NBJOURABSMALADIE
           END

        END
			
        * CONGES SANS SOLDE OU PARENTAL
      CASE W_CODEABSENCE="12" OR W_CODEABSENCE="13"    
		
         GOSUB 300

         GOSUB 301

         W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES

         IF W_CODEABSENCE="12" THEN   
            ENR_CONTRATEMP<70>=ENR_CONTRATEMP<70>+W_NBJOURABS
         END ELSE
            ENR_CONTRATEMP<70>=ENR_CONTRATEMP<70> + W_NBJOURABS / 2
         END

      CASE 1 

         GOSUB 300

         GOSUB 301

         W_SALREFHRES=0
         W_SALREFMONT=0

         * CALCUL SALAIRE DE REFERENCE
         K=1
         LOOP
         UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
            K=K+1
         REPEAT

         * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
         * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
         IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
            ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
         END

         W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABS)
         W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABS)

         * PRISE DES 10 %
         W_SALREFHRES=INT((W_SALREFHRES*10/100)+1/2)
         W_SALREFMONT=INT((W_SALREFMONT*10/100)+1/2)

         ENR_CONTRATEMP<45>=ENR_CONTRATEMP<45>+W_SALREFHRES
         ENR_CONTRATEMP<46>=ENR_CONTRATEMP<46>+W_SALREFMONT
          
      END CASE       

RETURN	 

*********************************************************
*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)

300 * 

    * DEBUT ABS >= DEBUT MOIS
    IF CLE[8,LEN(CLE)-7]>=W_DEBUTPERIODE THEN
    * FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-CLE[8,LEN(CLE)-7]+1
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-CLE[8,LEN(CLE)-7]+1
	END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-W_DEBUTPERIODE+1
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-W_DEBUTPERIODE+1
	END
    END
    W_NBJOURABS=W_NBJOURABS*100

    * DIMINUTION DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANT<1>=2 THEN W_NBJOURABS=W_NBJOURABS-50
    IF ENR_ABSENCESAIDANT<3>=1 THEN W_NBJOURABS=W_NBJOURABS-50

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES

301 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURCONGES=250*W_NBJOURABS/W_NbJourMois
    W_NBJOURCONGES=INT(W_NBJOURCONGES+1/2)

RETURN

*********************************************************
*********************************************************
* CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* OU JANVIER->DECEMBRE SI ATT.28 CONVENTIONCOL = 1

302 *
    W_CUMULMALADIE=0
    W_REQMALADIEVIDE="FAUX"

    IF ENR_CONVENTIONCOL<28>="0" OR ENR_CONVENTIONCOL<28>="" THEN
      IF W_PERIODE[5,2]>="06" THEN
        W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4],"D4/")
      END ELSE
        W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4]-1,"D4/")
      END
    END ELSE
        W_DEBUTANNEE=ICONV("01/01/":W_PERIODE[1,4],"D4/")
    END
    W_PERIODECOURS=W_DEBUTPERIODE-1   

    IF W_DEBUTANNEE#W_DEBUTPERIODE THEN
      EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC NumMotifAidant = "01" AND AVEC FinAbsAidant >= "':W_DEBUTANNEE:'" OR = "" AND AVEC DebAbsAidant <= "':W_PERIODECOURS:'" PAR DebAbsAidant'
      EXECUTE "SAUVE-LISTE LISTEMALADIEAIDANT"
      EXECUTE "LISTE LISTEMALADIEAIDANT" CAPTURING MSG RETURNING MSGCODE

      IF MSGCODE<1>=209 THEN W_REQMALADIEVIDE="VRAI"

      IF W_REQMALADIEVIDE="FAUX" THEN
         SELECT F.ABSENCESAIDANT TO LISTEMALADIEAIDANT

         LOOP 
	      READNEXT CLECUM FROM LISTEMALADIEAIDANT ELSE
	          W_REQMALADIEVIDE="VRAI"
     	      END
	      UNTIL W_REQMALADIEVIDE="VRAI" DO

              READ ENR_ABSENCESAIDANTCUM FROM F.ABSENCESAIDANT,CLECUM ELSE ENR_ABSENCESAIDANTCUM=""
	      GOSUB 303
    	      * CUMUL DU NOMBRE DE JOURS DE MALADIE SUR L'ANNEE
	      W_CUMULMALADIE=W_CUMULMALADIE+W_NBJOURABSCUMUL              
	 REPEAT
      END ELSE 
	 W_CUMULMALADIE=0
      END
    END ELSE
      W_CUMULMALADIE=0
    END
 
RETURN


*********************************************************
*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE

303 * 
    * DEBUT ABS <= 01/06 OU <= 01/01
    IF CLECUM[8,LEN(CLECUM)-7]<=W_DEBUTANNEE THEN
        * FIN ABSENCES <= FIN MOIS
      IF ENR_ABSENCESAIDANTCUM<2>>=W_DEBUTANNEE THEN
   	   IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
            W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-W_DEBUTANNEE+1
	   END ELSE
            W_NBJOURABSCUMUL=W_PERIODECOURS-W_DEBUTANNEE+1
	   END
      END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
      IF CLECUM[8,LEN(CLECUM)-7]<=W_PERIODECOURS THEN
	   IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
  	    W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-CLECUM[8,LEN(CLECUM)-7]+1
	   END ELSE
  	    W_NBJOURABSCUMUL=W_PERIODECOURS-CLECUM[8,LEN(CLECUM)-7]+1
	   END
      END
    END
    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL*100

    * DIMINUTION DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANTCUM<1>=2 THEN W_NBJOURABSCUMUL=W_NBJOURABSCUMUL-50
    IF ENR_ABSENCESAIDANTCUM<3>=1 THEN W_NBJOURABSCUMUL=W_NBJOURABSCUMUL-50

RETURN


****************************************************************
****************************************************************
* SELECTION DES CONTRATS PREVOYANCES
304

W_TabPrev=""
W_TabPrev<1>="807"
W_TabPrev<2>="808"

EXECUTE 'SSELECT CONTRATSPREV'
EXECUTE 'SAUVE-LISTE W_ListeCONTRATSPREV'
EXECUTE "LISTE W_ListeCONTRATSPREV" RETURNING MSGCODE

IF MSGCODE<1> # 209 THEN
   SELECT F.CONTRATSPREV TO W_ListeCONTRATSPREV
   W_FiniPrev = "FAUX"
   LOOP
      READNEXT W_ClePrev FROM W_ListeCONTRATSPREV ELSE W_FiniPrev="VRAI"
   WHILE W_FiniPrev = "FAUX" DO
      READ ENR_CONTRATSPREV FROM F.CONTRATSPREV,W_ClePrev THEN

         W_CodeRubPrev=ENR_CONTRATSPREV<41>
         GOSUB 305

         W_CodeRubPrev=ENR_CONTRATSPREV<42>
         GOSUB 305

      END
          
   REPEAT
END

W_CountRubPrev=DCOUNT(W_TabPrev,CHAR(254))

EXECUTE "EFFACER-LISTE W_ListeCONTRATSPREV"

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS
305
   IF W_CodeRubPrev # "" THEN

      iPrev=1
      W_TrouvePrev="FAUX"
      LOOP
      WHILE W_TabPrev<iPrev> # "" AND W_TrouvePrev="FAUX" DO

         IF W_CodeRubPrev = W_TabPrev<iPrev> THEN
            W_TrouvePrev="VRAI"
         END
         iPrev=iPrev+1
      REPEAT
      IF W_TrouvePrev="FAUX" THEN
         W_TabPrev<iPrev>=W_CodeRubPrev
      END
   END

RETURN
